<?php
/**
  * Requester
  *
  */

// 获取 post string
function post_str($para='', $default=false){
	if (empty($para)) return false;

	if (isset($_POST[$para])){
		$re = trim($_POST[$para]);
	}else{
		$re = $default;
	}

	return $re;
}

// 获取 post number
function post_num($para='', $default=false){
	if (empty($para)) return false;

	if (isset($_POST[$para])){
		$re = trim($_POST[$para]);
		$re = is_numeric($re) ? $re : $default;
	}else{
		$re = $default;
	}

	return $re;
}

// 获取 post array
function post_arr($para='', $default=false){
	if (empty($para)) return false;

	if (isset($_POST[$para])){
		$re = is_array($_POST[$para]) ? $_POST[$para] : $default;
	}else{
		$re = $default;
	}

	return $re;
}

// 获取 get string
function get_str($para='', $default=false){
	if (empty($para)) return false;

	if (isset($_GET[$para])){
		$re = trim($_GET[$para]);
	}else{
		$re = $default;
	}

	return $re;
}

// 获取 get number
function get_num($para='', $default=false){
	if (empty($para)) return false;

	if (isset($_GET[$para])){
		$re = trim($_GET[$para]);
		$re = is_numeric($re) ? $re : $default;
	}else{
		$re = $default;
	}

	return $re;
}

// 获取 get array
function get_arr($para='', $default=false){
	if (empty($para)) return false;

	if (isset($_GET[$para])){
		$re = is_array($_GET[$para]) ? $_POST[$para] : $default;
	}else{
		$re = $default;
	}

	return $re;
}

// 获取远程文件的大小
function remote_filesize($url) {
    $size = 0;
    $urlinfo = parse_url($url);
    if ($urlinfo[ 'scheme'] != 'http'){
        return $size;
    }else if(empty($urlinfo['port'])){
        $urlinfo['port'] = 80;
    }
    $fp = fsockopen($urlinfo['host'], $urlinfo['port'], $errno, $errstr, 30);
    if ($fp){
        fwrite($fp, 'HEAD' . $url . "HTTP/1.1\r\n");
        fwrite($fp, 'HOST:' . $urlinfo[ 'host '] . "\r\n");
        fwrite($fp, "Connection:close\r\n\r\n");
        while (!feof($fp)){
            $header = fgets($fp, 4096);
            if (strpos($header, 'Content-Length') === 0){
                $matches = array();
                preg_match( '#(\d+)# ', $header, $matches);
                $size = sprintf( '%u ', $matches[0]);
                break;
            }
        }
        fclose ($fp);
        return $size;
    }else{
        return $size;
    }
}

// 抓取远程文件
function fetch_file($url, $path='', $filename='') {
    if($url == '' || $path == '') return false;
    if (!file_exists($path)){
        $re = @mkdir($path, '0777', true);
        if (!$re) return false;
    }
    $path = rtrim($path, "\/\\");

    $file = '';
    if($filename == '') {
        $ext = strrchr($url, '.');
        $ext = $ext ? $ext : '.tmp';
        for ($i=0; $i < 50; $i++){
            $filename = date("YmdHis_") . randomkeys(6) . $ext;
            $file = $path . '/' . $filename;
            if (!file_exists($file)) break;
        }
        if ($i == 50) return false;
    }else{
        $file = $path . '/' . $filename;
        if (file_exists($file)) return false;
    }

    ob_start();
    readfile($url);
    $file_con = ob_get_contents();
    ob_end_clean();
    $size = strlen($file_con);
    $fp = @fopen($filename, "a");
    if (!$fp) return false;
    fwrite($fp, $file_con);
    fclose($fp);

    return $file;
}

// get请求
function http_get($url, $timeout=3){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    $result = curl_exec($ch);

    if (!is_string($result) || !strlen($result)) {
        $result = false;
        $error = curl_error($ch);
    }
    curl_close($ch);

    return $result;
}

// post请求
function http_post($url, $data, $timeout=3){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    $result = curl_exec($ch);

    if (!is_string($result) || !strlen($result)) {
        $result = false;
        $error = curl_error($ch);
    }
    curl_close($ch);

    return $result;
}

// get from API
function get_api($api, $data=array()){
    if (empty($api)){
        return false;
    }
    $url = APISERVER . $api . '.php';

    if (empty($data)){
        $result = http_get($url);
    }else{
        $result = http_post($url, $data);
    }

    if ($result){
        $result = json_decode($result, true);
    }

    return $result;
}
